#pragma once
#include<iostream>
#include<string>
using namespace std;

string opers="+-*/%";

enum{
	DivZero=1,
	ModZero,
	Unknow
};

class Task

{
	public:
		Task()
		{}
	Task(int x,int y,char op):_data1(x),_data2(y),_op(op),_result(0),_exitcode(0)
	{}
	void run()
	{
		switch(_op)
		{
			case'+':
				_result=_data1+_data2;
					break;
			case'-':
				_result=_data1-_data2;
				break;
			case'*':
				_result=_data1*_data2;
					break;
			case'/':
				if(_data2==0) _exitcode=DivZero;
				else _result=_data1/_data2;
				break;
			case'%':
				if(_data2==0) _exitcode=ModZero;
				else _result=_data1%_data2;
				break;
			default:
				_exitcode=Unknow;
				break;
		}
	}
	void operator()()
	{
		run();
	}

	string GetTask()
	{
		string r=to_string(_data1);
		r+=_op;
		r+=to_string(_data2);
		r+="=?";
		return r;
	}
	string GetRsult()
	{
		string ret=to_string(_data1);
		ret+=_op;
		ret+=to_string(_data2);
		ret+='=';
		ret+="[code:";
		ret+=to_string(_exitcode);
		ret+=']';
		return ret;
	}

	
		~Task()
		{
		}
	private:
	int _data1;
	int _data2;
	char _op;
	int _result;
	int _exitcode;	
};
